package com.lindroy.androidplayer.logic.network

import com.lindroy.androidplayer.logic.model.CollectUrlResponse
import com.lindroy.androidplayer.logic.model.*
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
import retrofit2.http.Query

/**
 * @author Lin
 * @date 2021/10/14
 * @function
 */
interface ApiService {

    //region 注册登录
    @POST("user/login")
    suspend fun login(
        @Query("username") userName: String,
        @Query("password") password: String
    ): ApiResponse<LoginModel>

    @POST("user/register")
    suspend fun register(
        @Query("username") userName: String,
        @Query("password") password: String,
        @Query("repassword") repassword: String
    ): ApiResponse<LoginModel>

    @GET("user/logout/json")
    suspend fun logout(): ApiResponse<Any?>
    //region 注册登录

    //region 首页
    //轮播图
    @GET("banner/json")
    suspend fun getBanner(): ApiResponse<List<BannerResp>>

    //置顶文章
    @GET("article/top/json")
    suspend fun getTopArticles(): ApiResponse<List<ArticleResp>>

    //首页文章
    @GET("article/list/{page}/json")
    suspend fun getArticles(
        @Path("page") page: Int,
        @Query("page_size") pageSize: Int = 20
    ): ApiResponse<PageDataModel<ArticleResp>>
    //endregion 首页

    //region 项目
    //获取所有的项目种类
    @GET("project/tree/json")
    suspend fun getProjectTypes(): ApiResponse<List<ProjectTypesResp>>

    //获取某一项目类型下的项目
    @GET("project/list/{page}/json")
    suspend fun getProjectList(
        @Path("page") page: Int,
        @Query("cid") cid: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<ProjectListResp>>
    //endregion 项目

    //region 公众号
    //获取公众号列表
    @GET("wxarticle/chapters/json")
    suspend fun getWXChapters(): ApiResponse<List<WXChapterResp>>

    //获取某一公众号下的文章
    @GET("wxarticle/list/{id}/{page}/json")
    suspend fun getWxArticles(
        @Path("id") id: Int,
        @Path("page") page: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<WXArticleResp>>
    //endregion 公众号

    //region 广场
    @GET("user_article/list/{pageNo}/json")
    suspend fun getSquareArticles(
        @Path("pageNo") pageNo: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<ArticleResp>>
    //endregion 广场

    //region 体系
    //获取体系目录
    @GET("tree/json")
    suspend fun getKnowledgeSystemChapters(): ApiResponse<List<KnowledgeResp>>

    //获取某一体系下的文章
    @GET("article/list/{pageNo}/json")
    suspend fun getKnowledgeArticles(
        @Path("pageNo") pageNo: Int,
        @Query("cid") cid: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<ArticleResp>>
    //endregion 体系

    //region 问答
    //获取问答列表
    @GET("wenda/list/{page}/json")
    suspend fun getQuestionList(
        @Path("page") page: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<ArticleResp>>
    //endregion 问答

    //region 导航
    @GET("navi/json")
    suspend fun getNavigationData(): ApiResponse<List<NavigationDataResp>>
    //endregion 导航

    //region 积分模块
    //个人积分
    @GET("lg/coin/userinfo/json")
    suspend fun getMyCoinInfo(): ApiResponse<CoinResp>

    //积分排行榜
    @GET("coin/rank/{page}/json")
    suspend fun getCoinRanking(@Path("page") page: Int): ApiResponse<PageDataModel<CoinRankingResp>>

    //个人积分记录
    @GET("lg/coin/list/{page}/json")
    suspend fun getCoinHistory(@Path("page") page: Int): ApiResponse<PageDataModel<CoinHistoryResp>>
    //endregion 积分模块

    //region 收藏相关接口
    /**
     * 收藏文章
     */
    @POST("lg/collect/{id}/json")
    suspend fun collect(@Path("id") id: Int): ApiResponse<Any?>

    /**
     * 取消收藏文章-我的收藏页面
     */
    @POST("lg/uncollect/{id}/json")
    suspend fun unCollect(
        @Path("id") id: Int,
        @Query("originId") originId: Int = -1
    ): ApiResponse<Any?>

    /**
     * 取消收藏文章-文章列表
     */
    @POST("lg/uncollect_originId/{id}/json")
    suspend fun unCollectListArticle(@Path("id") id: Int): ApiResponse<Any?>

    /**
     * 收藏文章列表
     */
    @GET("lg/collect/list/{pageNo}/json")
    suspend fun getCollectedArticles(@Path("pageNo") pageNo: Int): ApiResponse<PageDataModel<CollectedArticleResp>>

    /**
     * 收藏网址列表
     */
    @GET("lg/collect/usertools/json")
    suspend fun getCollectedWebsites(): ApiResponse<List<CollectedWebsiteResp>>

    /**
     * 收藏网址
     */
    @POST("lg/collect/addtool/json")
    suspend fun collectUrl(
        @Query("name") name: String,
        @Query("link") link: String
    ): ApiResponse<CollectUrlResponse>

    /**
     * 取消收藏网址
     */
    @POST("lg/collect/deletetool/json")
    suspend fun deletetool(@Query("id") id: Int): ApiResponse<Any?>
    //endregion 收藏相关接口

    //region 分享
    @GET("user/lg/private_articles/{pageNo}/json")
    suspend fun getMyShareList(
        @Path("pageNo") pageNo: Int,
        @Query("page_size") pageSize: Int
    ): ApiResponse<SharedModel>
    //endregion

    //region 搜索
    /**
     * 搜索热词
     */
    @GET("hotkey/json")
    suspend fun getSearchHotKey(): ApiResponse<List<SearchHotKeyResp>>

    /**
     * 搜索结果
     */
    @POST("article/query/{pageNo}/json")
    suspend fun getSearchResult(
        @Path("pageNo") pageNo: Int,
        @Query("k") keyword: String,
        @Query("page_size") pageSize: Int
    ): ApiResponse<PageDataModel<ArticleResp>>
    //endregion
}

